<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <!--   作用：圣杯布局和双飞翼布局解决的问题是一样的，就是两边顶宽，中间自适应的三栏布局，中间栏要在放在文档流前面以优先渲染。 -->
<!--   区别：圣杯布局，为了中间div内容不被遮挡，将中间div设置了左右padding-left和padding-right后，将左右两个div用相对布局position: relative并分别配合right和left属性，以便左右两栏div移动后不遮挡中间div。
  双飞翼布局，为了中间div内容不被遮挡，直接在中间div内部创建子div用于放置内容，在该子div里用margin-left和margin-right为左右两栏div留出位置 -->
  <!-- 圣杯布局 -->
  <div id="hd">header</div>
  <div id="bd">
    <div id="middle">middle</div>
    <div id="left">left</div>
    <div id="right">right</div>
  </div>
  <div id="footer">footer</div>
</body>
</html>
<style>
  #hd{
    height: 50px;
    background-color: #666;
    text-align: center;
  }
  #bd{
    padding: 0 200px 0 180px;
    height: 100px;
  }
  #middle{
    float: left;
    width: 100%;
    height: 100px;
    background-color: blue;
  }
  #left{
    float: left;
    width: 180px;
    height: 100px;
    margin-left: -100%;
    background-color: #0c9;
    /* *中间栏的位置摆正之后，左栏的位置也相应右移，通过相对定位的left恢复到正确位置* */
    position: relative;
    left: -180px;
  }
  #right{
    float: left;
    width: 200px;
    height: 100px;
    margin-left: -200px;
    background-color: #0c9;
    /* *中间栏的位置摆正之后，右栏的位置也相应左移，通过相对定位的right恢复到正确位置 */
    position: relative;
    right: -200px;
  }
  #footer{
    height:50px;
    background: #666;
    text-align: center;
  }
</style>